// ICalculator.aidl
package com.young.aidl_base_sdk;
import com.young.aidl_base_sdk.bean.Sample;
import com.young.aidl_base_sdk.ICalculatorListener;

// Declare any non-default types here with import statements

interface ICalculator {

    // 基础参数的方法
    int add(int a, int b);
    int subtract(int a, int b);
    int multiply(int a, int b);
    int divide(int a, int b);

    // parcelable 对象的传递方法
    // in 表示入参，从客户端流向服务端
    void optionParcel(in Sample sample);

    // out：表示出参，类似 C/C++ 的引用，从服务端流向客户端
    // 当我们在服务端修改对象的时候，客户端可以收到服务端的修改
    // 非基础数据类型的参数，都不需要说明数据流向，有 in, out, inout
    void optionOut(out Sample sample);

    // 传递 bundle
    void optionBundle(in Bundle bundle);


    /*
    传输大文件
    @param pdf 需要传输的文件描述
    */
    void transactFileDescriptor(in ParcelFileDescriptor pdf);

    /*
    模拟耗时
    */
    void optionTimeOut();

    /*
     使用 oneway 处理耗时
    */
    oneway void optionOneWay();

    /**
    * 注册客户端回调（用来主动给客户端发送消息，也就是进行进程的双向通讯）
    */
    oneway void registerListener(ICalculatorListener listener);

    /**
    * 注销客户端回调(在客户端进程结束的时候，一定要注销)
    */
    oneway void unRegisterListener(ICalculatorListener listener);



}